﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using UricaoWeb.LogicaDeNegocios.Seguridad_y_Roles;

using UricaoWeb.LogicaDeNegocios.Empleados;


namespace UricaoWeb.Presentacion
{
    public partial class API_Empleado_Consultar : API_Seguridad_Principal
    {
        #region Variables Locales
        private ListaEmpleadoLogico _listaEmpleado = new ListaEmpleadoLogico();
        private LogicaNegocioEmpleado _controlador = new LogicaNegocioEmpleado();
        #endregion
        public static int _fkHotel;
        /// <summary>
        /// Método Es el constructor por defecto de la clase, carga la lista de empleados
        /// </summary>
        protected void Page_Load(object sender, EventArgs e)
        {
            if (Session["user"] != null)
            {
                Logica_Usuario usuario = (Logica_Usuario)Session["user"];
                _fkHotel = Convert.ToInt32(usuario.FkHotel);
                var master = Master as MasterPage;
                if (master != null)
                {
                    master.actualizar_label();
                }
                base.validar_usuario();
                /// Filta los empleado con lo escrito en la barra de busqueda
                string request = Request.QueryString["inptSearch"];

                /// Si hay algo escrito busca realiza la consulta
                if (request != null)
                {
                    KeySearchEmpleado(request, _fkHotel);

                }
                /// Si no carga todos los empleados de la BD
                else
                {
                    _listaEmpleado = _controlador.EmpleadoListaLogico(_fkHotel);//.ConsultarEmpleados();
                    if (!IsPostBack)
                    {
                        LlenarGridView();
                    }
                }
            }
            else
            {
                Server.Transfer("API_Seguridad_Login_.aspx", false);
            }
        }

        /// <summary>
        /// Método que llena el GridView estando ya la misma llena
        /// Parámetros: 
        /// List Empleado: Lista de tipo empleados
        /// Excepciones posibles:
        /// Excepciones ExcepcionesEmpleado - Mensaje: Falla
        /// </summary>
        private void LlenarGridViewEmpleado(ListaEmpleadoLogico lista)
        {

            LimpiarGridView();
            GridViewEmpleado.DataSource = lista.ListaEmpleadosLogico;
            GridViewEmpleado.DataBind();

        }

        /// <summary>
        /// Método que vacía el GridView  
        /// Excepciones posibles:
        /// Excepciones ExcepcionesEmpleado - Mensaje: Falla
        /// </summary>
        private void LimpiarGridView()
        {

            GridViewEmpleado.DataSource = null;
            GridViewEmpleado.DataBind();

        }

        /// <summary>
        /// Método que retorna los empleados segun la busqueda realizada
        /// Parámetros: 
        /// string idEmpleado: apellido del empleado
        /// Retorno: 
        /// List <Empleado>: Lista de tipo Empleado
        /// Excepciones posibles:
        /// </summary>
        private ListaEmpleadoLogico ConsultarEmpleadoKeySearch(string idEmpleado, int fkHotel)
        {
            return _controlador.EmpleadoSearchLogico(idEmpleado, fkHotel);
        }

        /// <summary>
        /// Método que llama al procedimiento LlenarGridViewEmpleado
        /// Parámetros: 
        /// string texto: Es el dato por el cual va a realizar la búsqueda
        /// Excepciones posibles:
        /// </summary>
        public void KeySearchEmpleado(string texto, int fkHotel)
        {

            if (_controlador.EmpleadoSearchLogico(texto, fkHotel).ListaEmpleadosLogico.Count == 0)
            {
                //Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "test", "<script>alert('Los Datos no coinciden con la busqueda');</script>");
                // Console.Out.Write("No hay datos que coinciden con la busqueda");
                //LimpiarGridView();
                // Response.Write("<script type='text/javascript'>alert('No hay Empleados que Coincidan con la busqueda');</script>");
                ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "alertMessage", "alert('No hay Empleados que Coincidan con la busqueda')", true);
            }
            else
            {
                LlenarGridViewEmpleado(_controlador.EmpleadoSearchLogico(texto, _fkHotel));
            }
        }

        /// <summary>
        /// Método que llena el GridView del ConsultarEmpleado.aspx
        /// Excepciones posibles:
        /// Excepciones ExcepcionesEmpleado - - Mensaje: Falla
        /// </summary>
        public void LlenarGridView()
        {
            GridViewEmpleado.DataSource = _controlador.EmpleadoListaLogico(_fkHotel).ListaEmpleadosLogico; //ojo
            GridViewEmpleado.DataBind();
        }

        /// <summary>
        /// Método que obtiene el ID del empleado seleccionado y redirige a la página API_empleado_modificar
        /// Parámetros: 
        /// object sender: Objeto que ha generado el evento
        /// EventArgs e: Contiene los datos del evento
        /// Excepciones posibles:
        /// </summary>
        protected void GvEmpleadoObtenerIndice(object sender, EventArgs e)
        {
            int indexSelec = GridViewEmpleado.SelectedIndex;
            int idEmpleado;
            string idValue = GridViewEmpleado.DataKeys[indexSelec].Value.ToString();
            bool parsed = Int32.TryParse(idValue, out idEmpleado);

            if (!parsed)
                Console.WriteLine("Int32.TryParse could not parse '{0}' to an int.\n", idValue);
            else
            {
                _controlador.EmpleadoUnicoLogico(idEmpleado, _fkHotel);
                Response.Redirect("API_empleado_modificar.aspx?id=" + idEmpleado);
            }
        }

        protected void GridViewEmpleado_PageIndexChanged(object sender, GridViewPageEventArgs e)
        {
            GridViewEmpleado.PageIndex = e.NewPageIndex;
            LlenarGridView();
        }
    }
}